package com.sybil.ot.dominio;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "SIL_HISTORICO_OT")
@NamedQueries({
   @NamedQuery(
           name = "HistoricoOT.maxPorOT",
           query = "SELECT MAX(h.llave.numeroHistorico) FROM HistoricoOT h WHERE h.llave.serieOT = :serieOT AND h.llave.numeroOT = :numeroOT"
   )
})
public class HistoricoOT implements Serializable {

   private static final long serialVersionUID = 1L;
   protected HistoricoOTPK llave;
   private String usuario;
   private Date fecha;
   private String estatus;
   private String descripcion;
   private Date fechaFin;
   private long tiempoRespuesta;
   private String rutaAnexo;
   private String comentarios;
   private String usuarioCreo;
   private String usuarioModif;
   private OrdenTrabajo ordenTrabajo;

   public HistoricoOT() {
   }

   public HistoricoOT(HistoricoOTPK clave) {
      this.llave = clave;
   }

   public HistoricoOT(String serieOT, int numeroOT, int numeroHistorico) {
      this.llave = new HistoricoOTPK(serieOT, numeroOT, numeroHistorico);
   }
   public HistoricoOT(HistoricoOTPK clave, String usuario, Date fecha, 
           String estatus, String descripcion, String comentarios) {
      this.llave = clave;
      this.usuario = usuario;
      this.fecha = fecha;
      this.estatus = estatus;
      this.descripcion = descripcion;
      this.comentarios = comentarios;
   }

   @EmbeddedId
   public HistoricoOTPK getLlave() {
      return llave;
   }

   public void setLlave(HistoricoOTPK llave) {
      this.llave = llave;
   }

   @Basic(optional = false)
   @Column(name = "HIOT_USUARIO")
   public String getUsuario() {
      return usuario;
   }

   public void setUsuario(String usuario) {
      this.usuario = usuario;
   }

   @Basic(optional = false)
   @Column(name = "HIOT_FECHA")
   @Temporal(TemporalType.TIMESTAMP)
   public Date getFecha() {
      return fecha;
   }

   public void setFecha(Date fecha) {
      this.fecha = fecha;
   }

   @Basic(optional = false)
   @Column(name = "HIOT_ESTATUS")
   public String getEstatus() {
      return estatus;
   }

   public void setEstatus(String estatus) {
      this.estatus = estatus;
   }

   @Basic(optional = false)
   @Column(name = "HIOT_DESCRIPCION")
   public String getDescripcion() {
      return descripcion;
   }

   public void setDescripcion(String descripcion) {
      this.descripcion = descripcion;
   }

   @Column(name = "HIOT_FECHA_FIN")
   @Temporal(TemporalType.TIMESTAMP)
   public Date getFechaFin() {
      return fechaFin;
   }

   public void setFechaFin(Date fechaFin) {
      this.fechaFin = fechaFin;
   }

   @Basic(optional = false)
   @Column(name = "HIOT_TIEMPO_RESPUESTA")
   public long getTiempoRespuesta() {
      return tiempoRespuesta;
   }

   public void setTiempoRespuesta(long tiempoRespuesta) {
      this.tiempoRespuesta = tiempoRespuesta;
   }

   @Column(name = "HIOT_RUTA_ANEXO")
   public String getRutaAnexo() {
      return rutaAnexo;
   }

   public void setRutaAnexo(String rutaAnexo) {
      this.rutaAnexo = rutaAnexo;
   }

   @Column(name = "HIOT_COMENTARIOS")
   public String getComentarios() {
      return comentarios;
   }

   public void setComentarios(String comentarios) {
      this.comentarios = comentarios;
   }

   @Basic(optional = false)
   @Column(name = "HIOT_USUARIO_CREO")
   public String getUsuarioCreo() {
      return usuarioCreo;
   }

   public void setUsuarioCreo(String usuarioCreo) {
      this.usuarioCreo = usuarioCreo;
   }

   @Column(name = "HIOT_USUARIO_MODIF")
   public String getUsuarioModif() {
      return usuarioModif;
   }

   public void setUsuarioModif(String usuarioModif) {
      this.usuarioModif = usuarioModif;
   }

   @JoinColumns({
      @JoinColumn(name = "HIOT_ORTR_SERIE", referencedColumnName = "ORTR_SERIE", insertable = false, updatable = false),
      @JoinColumn(name = "HIOT_ORTR_NUMERO", referencedColumnName = "ORTR_NUMERO", insertable = false, updatable = false)})
   @ManyToOne(optional = false, fetch = FetchType.LAZY)
   public OrdenTrabajo getOrdenTrabajo() {
      return ordenTrabajo;
   }

   public void setOrdenTrabajo(OrdenTrabajo ordenTrabajo) {
      this.ordenTrabajo = ordenTrabajo;
   }

   @Override
   public int hashCode() {
      int hash = 0;
      hash += (llave != null ? llave.hashCode() : 0);
      return hash;
   }

   @Override
   public boolean equals(Object object) {
      if (!(object instanceof HistoricoOT)) {
         return false;
      }
      HistoricoOT other = (HistoricoOT) object;
      if ((this.llave == null && other.llave != null) || (this.llave != null && !this.llave.equals(other.llave))) {
         return false;
      }
      return true;
   }

   @Override
   public String toString() {
      return "HistoricoOT[ llave=" + llave + " ]";
   }
}
